package de.revdev.streckenliste.dao;

import de.revdev.streckenliste.entities.SlAEintrag;
import de.revdev.streckenliste.entities.SlBEintrag;
import de.revdev.streckenliste.entities.Streckenliste;
import de.revdev.streckenliste.entities.Wildart;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.ParameterExpression;
import javax.persistence.criteria.Root;

/**
 *
 * @author f.lindermaier
 */
@Stateless
@LocalBean
public class SlAEintragDAO extends AbstractDAO<SlAEintrag> {

    @PersistenceContext(unitName = "Streckenliste-ejbPU")
    private EntityManager em;

    public SlAEintragDAO() {
        super(SlAEintrag.class);
    }

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public long count(Wildart wildart, SlBEintrag.AuffundArt auffundart, Streckenliste streckenliste) {
        try {
            CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
            CriteriaQuery<Long> cq = cb.createQuery(Long.class);
            Root<SlAEintrag> c = cq.from(SlAEintrag.class);
            cq.select(cb.count(c));
            ParameterExpression<Wildart> p = cb.parameter(Wildart.class);
            ParameterExpression<Integer> q = cb.parameter(Integer.class);
            ParameterExpression<Streckenliste> r = cb.parameter(Streckenliste.class);
            cq.where(cb.equal(c.get("auffundart"), q), cb.equal(c.get("wildart"), p), cb.equal(c.get("streckenliste"), r));
            TypedQuery tq = getEntityManager().createQuery(cq);
            return (Long) tq.setParameter(p, wildart).setParameter(q, auffundart).setParameter(r, streckenliste).getSingleResult();
        } catch (Exception e) {
            return 0;
        }
    }
}
